home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / ABERMUD.ZIP / NEWUAF.C < prev    next >
C/C++ Source or Header  |  1989-07-08  |  4KB  |  243 lines

  1. #include <stdio.h>
  2. #include "files.h"
  3.  
  4. extern FILE *openuaf();
  5. extern FILE *openlock();
  6. extern char *oname();
  7. extern char *pname();
  8.  
  9. extern char globme[];
  10.  
  11. struct uaf_being
  12. {
  13.     char p_name[16];
  14.     long p_score;
  15.     long p_strength;
  16.     long p_sex;
  17.     long p_level;
  18. };
  19.  
  20. typedef struct uaf_being PERSONA;
  21.  
  22. long personactl(name,d,act)
  23. char *name;
  24. PERSONA *d;
  25. int act;
  26. {
  27.     FILE *a;
  28.     char c[32],e[32];
  29.     a=openuaf("r+");
  30.     strcpy(e,name);
  31.     lowercase(e);
  32.     while(getpersona(a,d))
  33.     {
  34.         strcpy(c,d->p_name);
  35.         lowercase(c);
  36.         if(strcmp(c,e)==0) 
  37.         {
  38.             switch(act)
  39.             {
  40.             case 0:
  41.                 fcloselock(a);
  42.                 return(1);
  43.             case 1:    fseek(a,ftell(a)-sizeof(PERSONA),0);
  44.                 return((long)a);
  45.             }
  46.         }
  47.     }
  48.     fcloselock(a);    
  49.     return(-1);
  50. }
  51.  
  52. #define PCTL_GET 0
  53. #define PCTL_FIND 1
  54.  
  55. findpers(name,x)
  56. char *name;
  57. PERSONA *x;
  58. {
  59.     return(personactl(name,x,PCTL_GET));
  60. }
  61.  
  62. delpers(name)
  63. char *name;
  64. {
  65.     FILE *i;
  66.     PERSONA x;
  67. l1:    i=(FILE *)personactl(name,&x,PCTL_FIND);
  68.     if(i==(FILE *)-1) return;
  69.     lowercase(name);
  70.     lowercase(x.p_name);
  71.     if(strcmp(x.p_name,name)) 
  72.            crapup("Panic: Invalid Persona Delete");
  73.     strcpy(x.p_name,"");
  74.     x.p_level= -1;
  75.     fwrite(&x,sizeof(PERSONA),1,i);
  76.     fcloselock(i);
  77.     goto l1;
  78. }
  79.  
  80.  
  81.  
  82. putpers(name,pers)
  83. char *name;
  84. PERSONA *pers;
  85. {
  86.     FILE *i;
  87.     unsigned long flen;
  88.     PERSONA s;
  89.     i=(FILE *)personactl(name,&s,PCTL_FIND);
  90.     if(i==(FILE *)-1)
  91.     {
  92.         flen= -1;
  93.         i=(FILE *)personactl("",&s,PCTL_FIND);
  94.         if(i!=(FILE *)-1) goto fiok;
  95.         i=openuaf("a");
  96.         flen=ftell(i);
  97.         fiok:     if(fwrite(pers,sizeof(PERSONA),1,i)!=1)
  98.         {
  99.             bprintf("Save Failed - Device Full ?\n");
  100.             if(flen!=-1)ftruncate(fileno(i),flen);
  101.             fcloselock(i);
  102.             return;
  103.         }
  104.         fcloselock(i);
  105.         return;
  106.     }
  107.     fwrite(pers,sizeof(PERSONA),1,i);
  108.     fcloselock(i);
  109. }
  110.  
  111. FILE *openuaf(perm)
  112. char *perm;
  113. {
  114.     FILE *i;
  115.     i=openlock(UAF_RAND,perm);
  116.     if(i==NULL)
  117.     {
  118.         crapup("Cannot access UAF\n");
  119.     }
  120.     return(i);
  121. }
  122.  
  123. decpers(pers,name,str,score,lev,sex)
  124. PERSONA *pers;
  125. char *name;
  126. long *str,*score,*lev,*sex;
  127. {
  128.     strcpy(name,pers->p_name);
  129.     *str=pers->p_strength;
  130.     *score=pers->p_score;
  131.     *lev=pers->p_level;
  132.     *sex=pers->p_sex;
  133. }
  134.  
  135. long my_sco;
  136. long my_lev;
  137. long my_str;
  138. long my_sex;
  139.  
  140. initme()
  141. {
  142.     PERSONA x;
  143.     char s[32];
  144.     extern char globme[];
  145.     extern int errno;
  146.     if(findpers(globme,&x)!=-1)
  147.     {
  148.         decpers(&x,s,&my_str,&my_sco,&my_lev,&my_sex);
  149.         return;
  150.     }
  151.     if(errno!=0) crapup("Panic: Timeout event on user file\n");
  152.     x.p_score=0;
  153.     bprintf("Creating character....\n");
  154.     my_sco=0;
  155.     my_str=40;
  156.     my_lev=1;
  157.     moan1:bprintf("\nSex (M/F) : ");
  158.     pbfr();
  159.     keysetback();
  160.     getkbd(s,2);
  161.     keysetup();
  162.     lowercase(s);
  163.     switch(s[0])
  164.     {
  165.         case 'm':my_sex=0;
  166.         break;
  167.         case 'f':my_sex=1;
  168.         break;
  169.         default:bprintf("M or F");
  170.         goto moan1;
  171.     }
  172.     strcpy(x.p_name,globme);
  173.     x.p_strength=my_str;
  174.     x.p_level=my_lev;
  175.     x.p_sex=my_sex;
  176.     x.p_score=my_sco;
  177.     putpers(globme,&x);
  178. }
  179.  
  180. saveme()
  181. {
  182.     extern char globme[];
  183.     extern long zapped;
  184.     PERSONA x;
  185.     extern int mynum;
  186.     strcpy(x.p_name,globme);
  187.     x.p_strength=my_str;
  188.     x.p_level=my_lev;
  189.     x.p_sex=psexall(mynum);
  190.     x.p_score=my_sco;
  191.     if(zapped) return;
  192.     bprintf("\nSaving %s\n",globme);
  193.     putpers(globme,&x);
  194. }
  195.  
  196.  validname(name)
  197.  char *name;
  198.     {
  199.     long a;
  200.     if(resword(name)){bprintf("Sorry I cant call you that\n");return(0);  }
  201.     if(strlen(name)>10)
  202.        {
  203.        return(0);
  204.        }
  205.     a=0;
  206.     while(name[a])
  207.        {
  208.        if(name[a]==' ')
  209.           {
  210.           return(0);
  211.           }
  212.        a++;
  213.        }
  214.     if(fobn(name)!=-1)
  215.        {
  216.       bprintf("I can't call you that , It would be confused with an object\n");
  217.        return(0);
  218.        }
  219.     return(1);
  220.     }
  221.  
  222. resword(name)
  223. {
  224. if(!strcmp(name,"The")) return(1);
  225. if(!strcmp(name,"Me")) return(1);
  226. if(!strcmp(name,"Myself")) return(1);
  227. if(!strcmp(name,"It")) return(1);
  228. if(!strcmp(name,"Them")) return(1);
  229. if(!strcmp(name,"Him")) return(1);
  230. if(!strcmp(name,"Her")) return(1);
  231. if(!strcmp(name,"Someone")) return(1);
  232. return(0);
  233. }
  234.  
  235.  
  236. getpersona(file,pers)
  237. FILE *file;
  238. PERSONA *pers;
  239. {
  240.     if(fread(pers,sizeof(PERSONA),1,file)!=1) return(0);
  241.     return(1);
  242. }
  243.